package manage.controller;

import manage.domain.Teacher;
import manage.service.TeacherService;

import java.util.Scanner;

public abstract class BaseTeacherController {
    Scanner sc = new Scanner(System.in);
    TeacherService teacherService = new TeacherService();

    //老师信息管理系统启动方法
    public void start() {

        TeacherLoop:
        while (true) {
            System.out.println("--------------------欢迎来到老师信息管理系统------------------");
            System.out.println("请输入您的选择：1、添加老师信息  2、删除老师信息  3、修改老师信息  4、查看老师信息  5、退出");
            int choice = sc.nextInt();
            switch (choice) {
                case 1:
                    addTeacher();
                    break;
                case 2:
                    deleteTeacherById();
                    break;
                case 3:
                    upadateTeacher();
                    break;
                case 4:
                    finAllTeacher();
                    break;
                case 5:
                    System.out.println("感谢您使用老师管理系统！");
                    break TeacherLoop;
            }
        }
    }

    //修改老师信息
    public void upadateTeacher() {
        String updateId = isExistsStuId();
        Teacher newStu = inputStuInfo(updateId);//重复较多的代码使用方法封装下再调用
        teacherService.updateTeacher(updateId, newStu);//将用户需要修改的老师Id和封装对象传给service层
        System.out.println("修改成功！");
    }

    //删除老师信息
    public void deleteTeacherById() {
        String delId = isExistsStuId();
        teacherService.deleteTeacherById(delId);
        System.out.println("删除成功！");
    }

    //查找所有的老师
    public void finAllTeacher() {
        Teacher[] teas = teacherService.findAllTeacher();//因为返回的是teacher数组，所以用teacher数组接收
        if (teas == null) {//如果数组为空，提示添加信息
            System.out.println("查无信息，请添加后再查看！");
            return;//结束当前代码，不再向下执行
        }
        System.out.println("学号\t姓名\t年龄\t生日");
        for (int i = 0; i < teas.length; i++) {
            Teacher stu = teas[i];
            if (stu != null) {
                System.out.println(stu.getId() + "\t" + stu.getName() + "\t" + stu.getAge() + "\t" + stu.getBirthday());
            }
        }
    }

    //添加老师信息
    public void addTeacher() {
        String id;
        while (true) {
            System.out.println("请输入id：");
            id = sc.next();
            //调用isExists方法判断用户输入的id是否已经存在
            boolean flag = teacherService.isExists(id);
            if (flag) {
                System.out.println("学号已经存在!");
            } else {
                break;
            }
        }
        Teacher stu = inputStuInfo(id);//重复较多的代码使用方法封装下再调用
        boolean result = teacherService.addTeacher(stu);
        //"?" 后面是true返回的信息，"："后面是false返回的信息
        System.out.println(result ? "添加成功！" : "添加失败！");

    }

    //判断老师的Id是否存在（将重复使用的代码封装）
    public String isExistsStuId() {
        String id;
        while (true) {
            System.out.println("请输入老师id：");
            id = sc.next();
            boolean exist = teacherService.isExists(id);
            if (!exist) {
                System.out.println("您输入的老师Id不存在，请重新输入！");
            } else {
                break;
            }
        }
        return id;
    }

    //输入老师信息方法（将多次使用的用户输入封装起来，减少代码量）
    public abstract Teacher inputStuInfo(String id);


}
